﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define NDEBUG
#include <assert.h>

//#include <stdio.h>
//int main()
//{
//	int a = 10;
//	int* p = &a;
//	//* 是在说明pa是指针变量，⽽前⾯的 int 是在说明pa指向的是整型(int)类型的对象。
//	printf("%d\n", *p);
//	//*pa 的意思就是通过pa中存放的地址，找到指向的空间，*pa其实就是a变量
//	*p = 0;//显然这里代表a被重新赋值为0
//	return 0;
//}

//int main()
//{
//	int n = 10;
//	char* pc = (char*)&n;
//	int* pi = &n;
//	printf("%p\n", &n);
//	printf("%p\n", pc);
//	printf("%p\n", pc + 1);
//	printf("%p\n", pi);
//	printf("%p\n", pi + 1);
//	return 0;
//}



//int main()
//{
//	//int n = 10;
//	//void* p = &n;
//	//void* pc = &n;
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = arr;
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p+i));
//	}
//	return 0;
//}


//int My_strlen(char* arr)
//{
//		char* p = arr;
//		while (*p != '\0')
//		{
//			p++;
//		}
//		return p - arr;
//		//两个指针相减的结果是它们之间的元素个数
//}
//int main()
//{
//	char arr[] = "abcdef";
//	printf("%d\n",My_strlen(arr));
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (p < arr + sz)//指针p小于arr+sz,后者指向'\0'
//	{
//		printf("%d ", *p);
//		p++;
//	}
//	return 0;
//}


//void test1()
//{
//	int n = 10;
//	int m = 20;
//	 int*const  p = &n;
//	p = &m;
//	printf("%d\n", n);
//}
//test2()
//{
//	int n = 10;
//	int m = 20;
//	const int* const p = &n;
//	*p = 20;
//	p = &m;
//	printf("%d\n", n);
//}
//void test3()
//{
//	int n = 10;
//	int m = 20;
//    int*  p = &n;
//	*p = 30;
//	p = &m;
//	printf("%d\n", n);
//	printf("%d\n", *p);
//}
//void test4()
//{
//	int n = 10;
//	int m = 20;
//	const int* p = &n;
//	*p = 30;
//	p = &m;
//	printf("%d\n", n);
//	printf("%d\n", *p);
//}
//int main()
//{
//	//test1();
//	//test2();
//	//test3();
//	test4();
//	return 0;
//}

//int* test()
//{
//	int n = 10;
//	return &n;
//}
//int main()
//{
	//int arr[3] = { 1,2,3 };
	//int* p = &arr[0];
	//for (int i = 0; i < 3; i++)
	//{
	//	printf("%d\n", p[i]);
	//}
//	int*pi = test();
//	return 0;
//}

//int main()
//{
//	int arr[3] = { 1,2,3 };
//	int* p = &arr[0];
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d\n", p[i]);
//	}
//	assert(*p = NULL);
//	printf("%d\n", arr[0]);
//	return 0;
//}

//void swap(int* pi, int* pc)
//{
//	int temp = *pi;
//	*pi = *pc;
//	*pc = temp;
//}
//int main()
//{
//	int m = 0, n = 0;
//	scanf("%d %d", &m, &n);
//	printf("交换前m = %d , n = %d\n", m, n);
//	swap(&m,&n);
//	printf("交换后m = %d , n = %d\n", m, n);
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	printf("&arr      = %p\n", &arr);//数组的地址，但打印结果是数组首元素地址
//	printf("arr       = %p\n", arr);//数组首元素地址
//	printf("arr+1     = %p\n", arr + 1);//数组第二个元素的地址
//	printf("&arr+1    = %p\n", &arr+1);//跳过整个书组的意思
//	printf("&arr[0]   = %p\n", &arr[0]);//数组首元素地址
//	printf("&arr[0]+1 = %p\n", &arr[0]+1);//数组第二个元素的地址
//	printf("&p = %p\n", &p);
//	return 0;
//}



int main()
{
	int arr[10] = { 0 };
	//输⼊
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//输⼊
	int* p = arr;
	for (i = 0; i < sz; i++)
	{
		scanf("%d", p + i);
		//scanf("%d", arr+i);//也可以这样写
	}
	//输出
	for (i = 0; i < sz; i++)
	{
		/*printf("%d ", *(p + i));*/
		printf("%d ",p[i]);
	}
	return 0;
}

//int test(int arr[])
//{
//	int sz2 = sizeof(arr) / sizeof(arr[0]);
//	return sz2;
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz1 = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz1);
//	printf("%d\n",test(arr));//数组传参的本质是传递的是数组首元素的地址
//	return 0;
//}



//void test()
//{
//	int *p;//局部变量指针未初始化，默认为随机值
//	*p = 20;
//}
//
//void test2()
//{
//	int arr[10] = { 0 };
//	int* p = &arr[0];
//	int i = 0;
//	for (i = 0; i <= 11; i++)
//	{
//		//当指针指向的范围超出数组arr的范围时，p就是野指针
//		*(p++) = i;
//	}
//}
//
//int* t_test()
//{
//	int n = 100;
//	return &n;
//}
//void test3()
//{
//	int* p = t_test();
//	printf("%d\n", *p);
//}
//
//int main()
//{
//	//野指针三大成因
//	test();//指针未初始化
//	test2();//指针越界访问
//	test3();//指针指向的空间释放
//	return 0;
//}

//#include <stdio.h>
//#include <assert.h>
//int main()
//{
//	int n = 10;
//	int* pa = NULL;
//	int* pc;
//	assert(pa != NULL);
//	assert(pc = NULL);
//	pa = &n;
//	printf("%d\n", pa);
//	return 0;
//}



























